Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>HITS algorithm</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/HITS_algorithm"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-HITS_algorithm rootpage-HITS_algorithm skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">HITS algorithm</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><b>Hyperlink-Induced Topic Search</b> (<b>HITS</b>; also known as <b>hubs and authorities</b>) is a <a href="Link_analysis" title="Link analysis">link analysis</a> <a href="Algorithm" title="Algorithm">algorithm</a> that rates Web pages, developed by <a href="Jon_Kleinberg" title="Jon Kleinberg">Jon Kleinberg</a>. The idea behind Hubs and Authorities stemmed from a particular insight into the creation of web pages when the Internet was originally forming; that is, certain web pages, known as hubs, served as large directories that were not actually authoritative in the information that they held, but were used as compilations of a broad catalog of information that led users direct to other authoritative pages. In other words, a good hub represents a page that pointed to many other pages, while a good authority represents a page that is linked by many different hubs.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>The scheme therefore assigns two scores for each page: its authority, which estimates the value of the content of the page, and its hub value, which estimates the value of its links to other pages.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<div class="mw-heading mw-heading3"><h3 id="In_journals">In journals</h3></div>
<p>Many methods have been used to rank the importance of scientific journals. One such method is Garfield's <a href="Impact_factor" title="Impact factor">impact factor</a>. Journals such as <i><a href="Science_(journal)" title="Science (journal)">Science</a></i> and <i><a href="Nature_(journal)" title="Nature (journal)">Nature</a></i> are filled with numerous citations, making these magazines have very high impact factors. Thus, when comparing two more obscure journals which have received roughly the same number of citations but one of these journals has received many citations from <i>Science</i> and <i>Nature</i>, this journal needs be ranked higher. In other words, it is better to receive citations from an important journal than from an unimportant one.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="On_the_Web">On the Web</h3></div>
<p>This phenomenon also occurs in the <a href="Internet" title="Internet">Internet</a>. Counting the number of links to a page can give us a general estimate of its prominence on the Web, but a page with very few incoming links may also be prominent, if two of these links come from the home pages of sites like <a href="Yahoo!" class="mw-redirect" title="Yahoo!">Yahoo!</a>, <a href="Google" title="Google">Google</a>, or <a href="MSN" title="MSN">MSN</a>. Because these sites are of very high importance but are also <a href="Search_engines" class="mw-redirect" title="Search engines">search engines</a>, a page can be ranked much higher than its actual relevance.
</p>
<div class="mw-heading mw-heading2"><h2 id="Algorithm">Algorithm</h2></div>

<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="SALSA_algorithm" title="SALSA algorithm">SALSA algorithm</a></div>
<div class="mw-heading mw-heading3"><h3 id="Steps">Steps</h3></div>
<p>In the HITS algorithm, the first step is to retrieve the most relevant pages to the search query. This set is called the <i>root set</i> and can be obtained by taking the top pages returned by a text-based search algorithm. A <i>base set</i> is generated by augmenting the root set with all the web pages that are linked from it and some of the pages that link to it. The web pages in the base set and all hyperlinks among those pages form a focused subgraph. The HITS computation is performed only on this <i>focused subgraph</i>. According to Kleinberg the reason for constructing a base set is to ensure that most (or many) of the strongest authorities are included.
</p><p>Authority and hub values are defined in terms of one another in a <a href="Mutual_recursion" title="Mutual recursion">mutual recursion</a>. An authority value is computed as the sum of the scaled hub values that point to that page. A hub value is the sum of the scaled authority values of the pages it points to. Some implementations also consider the relevance of the linked pages.
</p><p>The algorithm performs a series of iterations, each consisting of two basic steps:
</p>
<ul><li><b>Authority update</b>: Update each node's <i>authority score</i> to be equal to the sum of the <i>hub scores</i> of each node that points to it. That is, a node is given a high authority score by being linked from pages that are recognized as Hubs for information.</li>
<li><b>Hub update</b>: Update each node's <i>hub score</i> to be equal to the sum of the <i>authority scores</i> of each node that it points to. That is, a node is given a high hub score by linking to nodes that are considered to be authorities on the subject.</li></ul>
<p>The Hub score and Authority score for a node is calculated with the following algorithm:
</p>
<ul><li>Start with each node having a hub score and authority score of 1.</li>
<li>Run the authority update rule</li>
<li>Run the hub update rule</li>
<li>Normalize the values by dividing each Hub score by square root of the sum of the squares of all Hub scores, and dividing each Authority score by square root of the sum of the squares of all Authority scores.</li>
<li>Repeat from the second step as necessary.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Comparison_to_PageRank">Comparison to PageRank</h3></div>
<p>HITS, like <a href="Larry_Page" title="Larry Page">Page</a> and <a href="Sergey_Brin" title="Sergey Brin">Brin</a>'s <a href="PageRank" title="PageRank">PageRank</a>, is an <a href="Iterative_algorithm" class="mw-redirect" title="Iterative algorithm">iterative algorithm</a> based on the <a href="Weblink" class="mw-redirect" title="Weblink">linkage of the documents on the web</a>. However it does have some major differences:
</p>
<ul><li>It is processed on a small subset of ‘relevant’ documents (a 'focused subgraph' or base set), instead of the set of all documents as was the case with PageRank.</li>
<li>It is query-dependent: the same page can receive a different hub/authority score given a different base set, which appears for a different query;</li>
<li>It must, as a corollary, be executed at query time, not at indexing time, with the associated drop in performance that accompanies query-time processing.</li>
<li>It computes two scores per document (hub and authority) as opposed to a single score;</li>
<li>It is not commonly used by search engines (though a similar algorithm was said to be used by <a href="Teoma" title="Teoma">Teoma</a>, which was acquired by <a href="Ask.com" title="Ask.com">Ask Jeeves/Ask.com</a>).</li></ul>
<div class="mw-heading mw-heading2"><h2 id="In_detail">In detail</h2></div>
<p>To begin the ranking, we let <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {auth} (p)=1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">a</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">t</mi>
<mi mathvariant="normal">h</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {auth} (p)=1}</annotation>
</semantics>
</math></span><img src="./ee5b7c823827a69fc3fb40563a80f01fbc297783.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.892ex; height:2.843ex;" alt="{\displaystyle \mathrm {auth} (p)=1}" loading="lazy"></span> and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {hub} (p)=1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">h</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">b</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {hub} (p)=1}</annotation>
</semantics>
</math></span><img src="./a91773b7786bfd931931c14704c9cb977908a803.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.117ex; height:2.843ex;" alt="{\displaystyle \mathrm {hub} (p)=1}" loading="lazy"></span> for each page <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle p}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>p</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle p}</annotation>
</semantics>
</math></span><img src="./81eac1e205430d1f40810df36a0edffdc367af36.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.089ex; width:1.259ex; height:2.009ex;" alt="{\displaystyle p}" loading="lazy"></span>. We consider two types of updates: Authority Update Rule and Hub Update Rule. In order to calculate the hub/authority scores of each node, repeated iterations of the Authority Update Rule and the Hub Update Rule are applied. A k-step application of the Hub-Authority algorithm entails applying for k times first the Authority Update Rule and then the Hub Update Rule.
</p>
<div class="mw-heading mw-heading3"><h3 id="Authority_update_rule">Authority update rule</h3></div>
<p>For each <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle p}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>p</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle p}</annotation>
</semantics>
</math></span><img src="./81eac1e205430d1f40810df36a0edffdc367af36.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.089ex; width:1.259ex; height:2.009ex;" alt="{\displaystyle p}" loading="lazy"></span>, we update <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {auth} (p)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">a</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">t</mi>
<mi mathvariant="normal">h</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {auth} (p)}</annotation>
</semantics>
</math></span><img src="./72e4ef28b0ed215cc20381e917da8e7936ec88ae.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:7.631ex; height:2.843ex;" alt="{\displaystyle \mathrm {auth} (p)}" loading="lazy"></span> to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {auth} (p)=\displaystyle \sum \nolimits _{q\in P_{\mathrm {to} }}\mathrm {hub} (q)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">a</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">t</mi>
<mi mathvariant="normal">h</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mo movablelimits="false">∑<!-- ∑ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>q</mi>
<mo>∈<!-- ∈ --></mo>
<msub>
<mi>P</mi>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">t</mi>
<mi mathvariant="normal">o</mi>
</mrow>
</mrow>
</msub>
</mrow>
</msub>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">h</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">b</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>q</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {auth} (p)=\displaystyle \sum \nolimits _{q\in P_{\mathrm {to} }}\mathrm {hub} (q)}</annotation>
</semantics>
</math></span><img src="./71d0e8916696029055b49519e80aeda5bef0474e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.671ex; width:25.719ex; height:4.176ex;" alt="{\displaystyle \mathrm {auth} (p)=\displaystyle \sum \nolimits _{q\in P_{\mathrm {to} }}\mathrm {hub} (q)}" loading="lazy"></span> where <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle P_{\mathrm {to} }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>P</mi>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">t</mi>
<mi mathvariant="normal">o</mi>
</mrow>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle P_{\mathrm {to} }}</annotation>
</semantics>
</math></span><img src="./c46949e0692a3f5b1acd158e2d69cc49a2eb12ea.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:3.186ex; height:2.509ex;" alt="{\displaystyle P_{\mathrm {to} }}" loading="lazy"></span> is all pages which link to page <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle p}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>p</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle p}</annotation>
</semantics>
</math></span><img src="./81eac1e205430d1f40810df36a0edffdc367af36.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.089ex; width:1.259ex; height:2.009ex;" alt="{\displaystyle p}" loading="lazy"></span>. That is, a page's authority score is the sum of all the hub scores of pages that point to it.
</p>
<div class="mw-heading mw-heading3"><h3 id="Hub_update_rule">Hub update rule</h3></div>
<p>For each <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle p}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>p</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle p}</annotation>
</semantics>
</math></span><img src="./81eac1e205430d1f40810df36a0edffdc367af36.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.089ex; width:1.259ex; height:2.009ex;" alt="{\displaystyle p}" loading="lazy"></span>, we update <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {hub} (p)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">h</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">b</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {hub} (p)}</annotation>
</semantics>
</math></span><img src="./2c3ccca1c3d32db2bd55f96f27cd52abde5f59dd.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.856ex; height:2.843ex;" alt="{\displaystyle \mathrm {hub} (p)}" loading="lazy"></span> to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {hub} (p)=\displaystyle \sum \nolimits _{q\in P_{\mathrm {from} }}\mathrm {auth} (q)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">h</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">b</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mo movablelimits="false">∑<!-- ∑ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>q</mi>
<mo>∈<!-- ∈ --></mo>
<msub>
<mi>P</mi>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">f</mi>
<mi mathvariant="normal">r</mi>
<mi mathvariant="normal">o</mi>
<mi mathvariant="normal">m</mi>
</mrow>
</mrow>
</msub>
</mrow>
</msub>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">a</mi>
<mi mathvariant="normal">u</mi>
<mi mathvariant="normal">t</mi>
<mi mathvariant="normal">h</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>q</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {hub} (p)=\displaystyle \sum \nolimits _{q\in P_{\mathrm {from} }}\mathrm {auth} (q)}</annotation>
</semantics>
</math></span><img src="./8a30ea3c0ac2821751d244aa32985e658b5c56d9.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:27.331ex; height:4.343ex;" alt="{\displaystyle \mathrm {hub} (p)=\displaystyle \sum \nolimits _{q\in P_{\mathrm {from} }}\mathrm {auth} (q)}" loading="lazy"></span> where <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle P_{\mathrm {from} }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>P</mi>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">f</mi>
<mi mathvariant="normal">r</mi>
<mi mathvariant="normal">o</mi>
<mi mathvariant="normal">m</mi>
</mrow>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle P_{\mathrm {from} }}</annotation>
</semantics>
</math></span><img src="./77619c9e2ade0e0ce82d7a57799aa0ad1ad051fe.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:5.172ex; height:2.509ex;" alt="{\displaystyle P_{\mathrm {from} }}" loading="lazy"></span> is all pages which page <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle p}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>p</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle p}</annotation>
</semantics>
</math></span><img src="./81eac1e205430d1f40810df36a0edffdc367af36.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.089ex; width:1.259ex; height:2.009ex;" alt="{\displaystyle p}" loading="lazy"></span> links to. That is, a page's hub score is the sum of all the authority scores of pages it points to.
</p>
<div class="mw-heading mw-heading3"><h3 id="Normalization">Normalization</h3></div>
<p>The final hub-authority scores of nodes are determined after infinite repetitions of the algorithm. As directly and iteratively applying the Hub Update Rule and Authority Update Rule leads to diverging values, it is necessary to <a href="Normalized_vector" class="mw-redirect" title="Normalized vector">normalize</a> the matrix after every iteration. Thus the values obtained from this process will eventually converge.
</p>
<div class="mw-heading mw-heading2"><h2 id="Pseudocode">Pseudocode</h2></div>
<pre><i>G</i>&nbsp;:= set of pages
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b>
<i>p</i>.auth = 1 // <i>p</i>.auth is the authority score of the page <i>p</i>
<i>p</i>.hub = 1 // <i>p</i>.hub is the hub score of the page <i>p</i>
<b>for</b> step <b>from</b> 1 <b>to</b> k <b>do</b> // run the algorithm for k steps
norm = 0
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b> // update all authority values first
<i>p</i>.auth = 0
<b>for each</b> page <i>q</i> in <i>p.incomingNeighbors</i> <b>do</b> // <i>p.incomingNeighbors</i> is the set of pages that link to <i>p</i>
<i>p</i>.auth += <i>q</i>.hub
norm += square(<i>p</i>.auth) // calculate the sum of the squared auth values to normalise
norm = sqrt(norm)
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b> // update the auth scores
<i>p</i>.auth = <i>p</i>.auth / norm // normalise the auth values
norm = 0
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b> // then update all hub values
<i>p</i>.hub = 0
<b>for each</b> page <i>r</i> in <i>p.outgoingNeighbors</i> <b>do</b> // <i>p.outgoingNeighbors</i> is the set of pages that <i>p</i> links to
<i>p</i>.hub += <i>r</i>.auth
norm += square(<i>p</i>.hub) // calculate the sum of the squared hub values to normalise
norm = sqrt(norm)
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b> // then update all hub values
<i>p</i>.hub = <i>p</i>.hub / norm // normalise the hub values
</pre>
<p>The hub and authority values converge in the pseudocode above.
</p><p>The code below does not converge, because it is necessary to limit the number of steps that the algorithm runs for. One way to get around this, however, would be to normalize the hub and authority values after each "step" by dividing each authority value by the square root of the sum of the squares of all authority values, and dividing each hub value by the square root of the sum of the squares of all hub values. This is what the pseudocode above does.
</p>
<div class="mw-heading mw-heading2"><h2 id="Non-converging_pseudocode">Non-converging pseudocode</h2></div>
<pre><i>G</i>&nbsp;:= set of pages
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b>
<i>p</i>.auth = 1 // <i>p</i>.auth is the authority score of the page <i>p</i>
<i>p</i>.hub = 1 // <i>p</i>.hub is the hub score of the page <i>p</i>

<b>function</b> HubsAndAuthorities(<i>G</i>)
<b>for</b> step <b>from</b> 1 <b>to</b> k <b>do</b> // run the algorithm for k steps
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b> // update all authority values first
<i>p</i>.auth = 0
<b>for each</b> page <i>q</i> in <i>p.incomingNeighbors</i> <b>do</b> // <i>p.incomingNeighbors</i> is the set of pages that link to <i>p</i>
<i>p</i>.auth += <i>q</i>.hub
<b>for each</b> page <i>p</i> in <i>G</i> <b>do</b> // then update all hub values
<i>p</i>.hub = 0
<b>for each</b> page <i>r</i> in <i>p.outgoingNeighbors</i> <b>do</b> // <i>p.outgoingNeighbors</i> is the set of pages that <i>p</i> links to
<i>p</i>.hub += <i>r</i>.auth
</pre>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="PageRank" title="PageRank">PageRank</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFChristopher_D._ManningPrabhakar_RaghavanHinrich_Schütze2008" class="citation web cs1">Christopher D. Manning; Prabhakar Raghavan; Hinrich Schütze (2008). <a rel="nofollow" class="external text" href="http://nlp.stanford.edu/IR-book/html/htmledition/hubs-and-authorities-1.html">"Introduction to Information Retrieval"</a>. Cambridge University Press<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-11-09</span></span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFKleinberg1999" class="citation web cs1">Kleinberg, Jon (December 1999). <a rel="nofollow" class="external text" href="http://www.cs.brown.edu/memex/ACM_HypertextTestbed/papers/10.html">"Hubs, Authorities, and Communities"</a>. Cornell University<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-11-09</span></span>.</cite></span>
</li>
</ol></div></div>
<ul><li><cite id="CITEREFKleinberg1999" class="citation journal cs1">Kleinberg, Jon (1999). <a rel="nofollow" class="external text" href="http://www.cs.cornell.edu/home/kleinber/auth.pdf">"Authoritative sources in a hyperlinked environment"</a> <span class="cs1-format">(PDF)</span>. <i>Journal of the ACM</i>. <b>46</b> (5): <span class="nowrap">604–</span>632. <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a>&nbsp;<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.8485">10.1.1.54.8485</a></span>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F324133.324140">10.1145/324133.324140</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:221584113">221584113</a>.</cite></li>
<li><cite id="CITEREFLiShang,_Y.Zhang,_W.2002" class="citation book cs1">Li, L.; Shang, Y.; Zhang, W. (2002). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20050403110302/http://www2002.org/CDROM/refereed/643/">"Improvement of HITS-based Algorithms on Web Documents"</a>. <i>Proceedings of the 11th International World Wide Web Conference (WWW 2002)</i>. Honolulu, HI. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-1-880672-20-4</bdi>. Archived from <a rel="nofollow" class="external text" href="http://www2002.org/CDROM/refereed/643/">the original</a> on 2005-04-03<span class="reference-accessdate">. Retrieved <span class="nowrap">2005-06-03</span></span>.</cite><span class="cs1-maint citation-comment"><code class="cs1-code">{{cite book}}</code>: CS1 maint: location missing publisher (link)</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><span><a rel="nofollow" class="external text" href="https://patents.google.com/patent/US6112202">U.S. patent 6,112,202</a></span></li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20170117191811/http://www.dupuis.me/node/25">Create a data search engine from a relational database</a> Search engine in C# based on HITS</li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-12-27" href="https://en.wikipedia.org/wiki/?title=HITS_algorithm&amp;oldid=1265600360">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>